package com.company;

/**
 * @ClassName:
 * @author:
 * @Description:
 * @Date
 **/
//给定一个包含红色、白色和蓝色，一共 n 个元素的数组，原地对它们进行排序，使得相同颜色的元素相邻，并按照红色、白色、蓝色顺序排列。
//
//此题中，我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
//
//来源：力扣（LeetCode）
//链接：https://leetcode-cn.com/problems/sort-colors
//著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
public class Leetcode75 {
    public static void sortColors(int[] nums) {
        int i = 0, p = -1, two = nums.length;
        //比1大的放左边，比1小的方右边，等于1的放中间
        //0到p 0   p+1到i-1 1 i到j 2
        while (i < two) {
            if (nums[i] == 0) {
                p++;
                swap(nums, p, i);
                i++;
            } else if (nums[i] == 2) {
                two--;
                swap(nums, i, two);
            } else {
                //nums[i]==1
                i++;
            }
        }
    }

    private static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    public static void main(String[] args) {
        int[] nums=new int[]{2,1,0,1,2,0};
        sortColors(nums);
    }
}
